var ProjetoDAO = require('./../DAO/projeto.dao');
var Projeto = require('./../classes/projeto');


function ProjetoMapper() {
    var dao = new ProjetoDAO();

    this.projetoToModel = function(p, callback) {
        var m = new dao.getModel();
        m.nome = p.getNome();
        m.tipo = p.getTipo();
        callback(m);
    }

    this.modelToProjeto = function(m, callback) {
        if (m instanceof Array) {
            var out = [];
            m.forEach(function(element) {
                var p = new Projeto(element.nome, element.tipo);
                p.setId(element._id);
                put.push(p);
            });
            callback(out);
        }
        else {
            var p = new Projeto(m.nome, m.tipo);
            p.setId(m._id);
            callback(p);
        }
    }

    this.add = function(projeto, callback) {
        this.projetoToModel(projeto, function(m) {
            dao.add(m, callback);
        });
    }

    this.get = function(projeto, callback) {
        var that = this;
        this.projetoToModel(projeto, function(m) {
            dao.get(m, function(err, doc) {
                that.modelToProjeto(doc, function(p) {
                    callback(err, p);
                });
            });
        });
    }

    this.getById = function(id, callback) {
        var that = this;
        dao.get(id, function(err, doc) {
            if(err) throw new Error('Not found!');
            that.modelToProjeto(doc, function(p) {
                callback(err, p);
            });
        });
    }

    //TODO
    //update

    this.remove = function(projeto, callback) {
        this.projetoToModel(projeto, function(m) {
            dao.remove(m, callback);
        });
    }

    this.getAll = function(callback) {
        var that = this;
        dao.getAll(function(err, all) {
            that.modelToProjeto(all, function(p) {
                callback(err, p);
            });
        });
    }
}

module.exports = ProjetoMapper;
